home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d21 / dvint390.arc / DVINTER.LST < prev    next >
File List  |  1990-07-14  |  84KB  |  2,117 lines

  1. DESQview Interrupt List        Release 90.3    Last change 7/15/90
  2. This compilation is Copyright (c) 1989, 1990 Ralf Brown
  3. ---------------------------------------------
  4. Please redistribute the following files unmodified as a group, in an archive
  5. named DVINT390:
  6.     DVINTER.1ST    the read-me file
  7.     DVINTER.LST    this file
  8. ---------------------------------------------
  9. If you notice any mistakes or omissions, please let me know!  It is only with
  10. YOUR help that the list can continue to grow at the current rate.  Please send
  11. all changes to me rather than distributing a modified version of the list.
  12.  
  13. Please read the file DVINTER.1ST before asking me any questions.  You may find
  14. that it's already been addressed.
  15.  
  16.      Ralf Brown
  17.  
  18. ARPA: ralf@cs.cmu.edu
  19. UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf
  20. BIT:  ralf%cs.cmu.edu@cmuccvma
  21. FIDO: Ralf Brown 1:129/3.1 (new address!)
  22.     or post a message to the DR_DEBUG echo
  23. CIS:  >INTERNET:ralf@cs.cmu.edu 
  24.  
  25. I reply to all e-mail submissions and inquiries, but some of my replies bounce
  26. because of bad return paths.  If you don't get a response from me within a
  27. reasonable period of time, send it again with a better return path (starting at
  28. harvard or ucbvax for UUCP, from the ARPA Internet for others).
  29. ---------------------------------------------
  30. See DVINTER.1ST for the key to system abbreviations and a list of the
  31. trademarks mentioned here.
  32. ---------------------------------------------
  33. DISCLAIMER:  I verify the information contained in this list to the best of my
  34. ability, but I cannot be held responsible for any problems caused by use or
  35. misuse of the information, especially for those functions not officially 
  36. documented.  If it is marked "internal", you should check it carefully to make
  37. sure it works the same way in your version of the software (and please let me
  38. know whether or not it works the same way).  Information marked with "???" is
  39. known to be incomplete or guesswork.
  40. ---------------------------------------------
  41. The use of -> instead of = signifies that the indicated register or register
  42. pair contains a pointer to the specified item, rather than the item itself
  43. ---------------------------------------------
  44. INT 10 - VIDEO - SET VIDEO MODE
  45.     AH = 00h
  46.     AL = mode (graphics mode if graphics resolution listed)
  47.          text  pixel graphic colors disp scrn  system
  48.          resol    box  resoltn        page addr
  49.        21h = 80x43    8x8  720x348 mono          DESQview 2.x+Hercules ***
  50.        22h = 80x43    8x8  720x348 mono          DESQview 2.x+Hercules ***
  51.  
  52.  *** DESQview intercepts calls to change into these two modes (21h is page 0,
  53.       22h is page 1) even if there is no Hercules graphics board installed
  54. ---------------------------------------------
  55. INT 10 - VIDEO (DESQview 2.0x only) - internal - SET ??? HANDLER
  56.     AH = 80h
  57.     DX = 4456h ('DV')
  58.     ES:DI -> FAR subroutine to be called on ???
  59. Return: DS = segment of DESQview data structure for video buffer
  60. Note:    this function is probably meant for internal use only, due to the magic
  61.       value required in DX
  62.     the subroutine seems to be called when the DESQview menu is accessed;
  63.       on entry, AL = 3 or 4
  64. ---------------------------------------------
  65. INT 10 - VIDEO (DESQview 2.0x only) - internal - GET ???
  66.     AH = 81h
  67.     DX = 4456h ('DV')
  68. Return: ES = segment of DESQview data structure for video buffer
  69.         BYTE ES:[0] = current window number in DV 2.0x
  70. Note:    this function is probably meant for internal use only, due to the magic
  71.       value required in DX
  72. ---------------------------------------------
  73. INT 10 - VIDEO (DESQview 2.0x only) - internal - GET CURRENT WINDOW INFO
  74.     AH = 82h
  75.     DX = 4456h ('DV')
  76. Return: DS = segment in DESQview for data structure
  77.          in DV 2.00,
  78.           BYTE DS:[0] = window number
  79.           WORD DS:[1] = segment of other data structure
  80.           WORD DS:[3] = segment of window's object handle
  81.     ES = segment of DESQview data structure for video buffer
  82.     AL = current window number
  83.     AH = ???
  84.     BL = direct screen writes
  85.         00h program does not do direct writes
  86.         01h program does direct writes, so shadow buffer not usable
  87.     BH = ???
  88.     CL = current video mode
  89.     CH = ???
  90. Note:    this function is probably meant for internal use only, due to the magic
  91.       value required in DX
  92. ---------------------------------------------
  93. INT 10 - VIDEO (TopView) - GET VIDEO BUFFER
  94.     AH = FEh
  95.     ES:DI = segment:offset of assumed video buffer
  96. Return: ES:DI = segment:offset of actual video buffer
  97. Notes:    if no multitasker is installed, ES:DI is returned unchanged
  98.     TopView requires a call to AH=FFh to notify if that the screen has
  99.       changed; DESQview will check for changes itself until the first call
  100.       to AH=FFh
  101. SeeAlso: INT 15/AX=1024h, INT 21/AH=2Bh"DESQview"
  102. ---------------------------------------------
  103. INT 10 - VIDEO (TopView) - UPDATE REAL SCREEN FROM VIDEO BUFFER
  104.     AH = FFh
  105.     CX = number of sequential characters that have been modified
  106.     DI = offset of first character that has been modified
  107.     ES = segment of video buffer
  108. Note:    avoid CX=0000h
  109. ---------------------------------------------
  110. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  111.     AX = 1000h
  112. Return: after other processes run
  113. ---------------------------------------------
  114. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  115.     AX = 1001h
  116.     BX = number of bytes to allocate
  117. Return: ES:DI -> block of memory
  118. SeeAlso: AX=1002h,DE0Ch
  119. ---------------------------------------------
  120. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  121.     AX = 1002h
  122.     ES:DI -> previously allocated block
  123. Return: block freed
  124. SeeAlso: AX=1001h,DE0Dh
  125. ---------------------------------------------
  126. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  127.     AX = 1003h
  128.     BH = attribute
  129.     BL = character
  130.     DX = segment of object handle for window
  131. Note:    BX=0 does not display anything, it only positions the hardware cursor
  132. ---------------------------------------------
  133. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  134.     AH = 10h
  135.     AL = 04h thru 12h
  136. Return: pops up "Programming error" window in DV 2.x
  137. ---------------------------------------------
  138. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  139.     AX = 1013h
  140.     ES:DI -> FAR service routine
  141. Return: BX = bit mask indicating which bit was allocated
  142.          0000h if no more bits available
  143. SeeAlso: AX=1014h,1015h
  144. ---------------------------------------------
  145. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  146.     AX = 1014h
  147.     BX = bit mask from INT 15/AX=1013h
  148. SeeAlso: AX=1013h,1015h
  149. ---------------------------------------------
  150. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  151.     AX = 1015h
  152.     BX = bit mask for interrupts to post
  153. Return: indicated routines will be called: (DV 2.0x) at next task switch
  154.                        (DV 2.2x) immediately
  155. SeeAlso: AX=1013h,1014h
  156. ---------------------------------------------
  157. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  158.     AX = 1016h
  159.     ES:DI = possible object handle
  160. Return: BX = FFFFh if ES:DI is a valid object handle
  161.          0000h if ES:DI is not
  162. SeeAlso: AX=DE14h
  163. ---------------------------------------------
  164. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  165.     AX = 1017h
  166. Return: pops up "Programming error" window in DV 2.x
  167. ---------------------------------------------
  168. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  169.     AX = 1018h
  170.     BH = column
  171.     BL = row
  172.     ES = segment of object handle for window below which to search
  173.          0000h = start search with topmost window
  174. Return: ES = segment of object handle for window which is visible at the
  175.          indicated position, or covered by indicated window
  176. ---------------------------------------------
  177. INT 15 - TopView - "SOUND" - MAKE TONE
  178.     AX = 1019h
  179.     BX = frequency in Hertz
  180.     CX = duration in clock ticks (18.2 ticks/sec)
  181. Return: immediately, tone continues to completion
  182. Notes:    if another tone is already playing, the new tone does not start until
  183.       completion of the previous one.  In DV 2.00, it is possible to enqueue
  184.       about 32 tones before the process is blocked until a note completes.
  185.     in DV 2.00, the lowest tone allowed is 20 Hz
  186. ---------------------------------------------
  187. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  188.     AX = 101Ah
  189. Return: stack switched
  190. SeeAlso: AX=1025h
  191. ---------------------------------------------
  192. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  193.     AX = 101Bh
  194. Return: task-switching temporarily disabled
  195. Note:    will not task-switch until END CRITICAL REGION (AX = 101Ch) called
  196. SeeAlso: AX=101Ch,DE13h
  197. ---------------------------------------------
  198. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  199.     AX = 101Ch
  200. Return: task-switching enabled
  201. SeeAlso: AX=101Bh,DE13h
  202. ---------------------------------------------
  203. INT 15 - TopView - "STOP" - STOP TASK
  204.     AX = 101Dh
  205.     ES = segment of object handle for task to be stopped
  206.          (== handle of main window for that task)
  207. Return: indicated task will no longer get CPU time
  208. Note:    at least in DV 2.00, this function is ignored unless the indicated task
  209.       is the current task.
  210. SeeAlso: AX=101Eh,102Bh
  211. ---------------------------------------------
  212. INT 15 - TopView - "START" - START TASK
  213.     AX = 101Eh
  214.     ES = segment of object handle for task to be started
  215.          (== handle of main window for that task)
  216. Return: indicated task is started up again
  217. SeeAlso: AX=101Dh,102Bh
  218. ---------------------------------------------
  219. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  220.     AX = 101Fh
  221.     BX = bit fields
  222.          bits 0-12: number of characters to display
  223.          bits 13,14: which mouse button may be pressed to remove window
  224.              00 = either
  225.              01 = left
  226.              10 = right
  227.              11 = either
  228.          bit 15: beep if 1
  229.     DS:DI -> text of message
  230.     CH = width of error window (0 = default)
  231.     CL = height of error window (0 = default)
  232.     DX = segment of object handle
  233. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  234. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  235. ---------------------------------------------
  236. INT 15 - TopView - UNIMPLEMENTED IN DV 2.0x
  237.     AX = 1020h
  238. Return: pops up "Programming error" window in DV 2.0x
  239. ---------------------------------------------
  240. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  241.     AX = 1021h
  242.     BX = segment of object handle for task to interrupt
  243.     DX:CX -> FAR routine to jump to next time task is run
  244. Return: nothing
  245. Note:    the current ES, DS, SI, DI, and BP are passed to the FAR routine
  246. ---------------------------------------------
  247. INT 15 - TopView - "GETVER" - GET VERSION
  248.     AX = 1022h
  249.     BX = 0
  250. Return: BX nonzero, TopView or compatible loaded
  251.     (BL = major version, BH = minor version)
  252. Notes:    TaskView returns BX = 0001h, DESQview 2.0 returns BX = 0A01h
  253. ---------------------------------------------
  254. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  255.     AX = 1023h
  256.     BX = segment of object handle for parent window within which to
  257.          position the window (0 = full screen)
  258.     ES = segment of object handle for window to be positioned
  259.     DL = bit flags
  260.          bits 0,1: horizontal position
  261.         00 = current
  262.         01 = center
  263.         10 = left
  264.         11 = right
  265.          bits 2,3: vertical position
  266.         00 = current
  267.         01 = center
  268.         10 = top
  269.         11 = bottom
  270.          bit 4: don't redraw screen if set
  271.          bits 5-7 not used
  272.     CH = number of columns to offset from position specified by DL
  273.     CL = number of rows to offset from position specified by DL
  274. Return: nothing
  275. ---------------------------------------------
  276. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  277.     AX = 1024h
  278.     BX = segment of object handle for window
  279.           (0 = use default)
  280. Return: ES:DI -> virtual screen
  281.     CX = size of virtual screen in bytes
  282.     DL = 00h text screen
  283.          01h graphics screen
  284. SeeAlso: INT 10/AH=FEh
  285. ---------------------------------------------
  286. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  287.     AX = 1025h
  288. Return: stack switched back
  289. Note:    call only after having switched to private stack
  290. SeeAlso: AX=101Ah
  291. ---------------------------------------------
  292. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  293.     AH = 10h
  294.     AL = 26h thru 2Ah
  295. Return: pops up "Programming error" window in DV 2.x
  296. ---------------------------------------------
  297. INT 15 - DESQview 2.0 (TopView???) - "POSTTASK" - AWAKEN TASK
  298.     AX = 102Bh
  299.     BX = segment of object handle for task
  300. Return: nothing
  301. SeeAlso: AX=101Dh,101Eh
  302. ---------------------------------------------
  303. INT 15 - DESQview 2.0 (TopView???) - START NEW APPLICATION IN NEW PROCESS
  304.     AX = 102Ch
  305.     ES:DI -> contents of .PIF/.DVP file (see below)
  306.     BX = size of .PIF/.DVP info
  307. Return: BX = segment of object handle for new task
  308.          0000h on error
  309.  
  310. Format of .PIF/.DVP file:
  311. Offset    Size    Description
  312.  00h    WORD    reserved (0)
  313.  02h 30 BYTEs    program title (blank-padded)
  314.  20h    WORD    maximum memory to allocate to partition in K
  315.  22h    WORD    minimum memory required in K
  316.  24h 64 BYTEs    ASCIZ program pathname
  317.  64h    BYTE    default drive letter ('A',...)
  318.  65h 64 BYTEs    ASCIZ default directory name
  319.  A5h 64 BYTEs    ASCIZ program parameters
  320.  E5h    BYTE    initial screen mode (0-7)
  321.  E6h    BYTE    number of text pages used
  322.  E7h    BYTE    number of first interrupt to save
  323.  E8h    BYTE    number of last interrupt to save
  324.  E9h    BYTE    rows in virtual screen buffer
  325.  EAh    BYTE    columns in virtual screen buffer
  326.  EBh    BYTE    initial window position, row
  327.  ECh    BYTE    initial window position, column
  328.  EDh    WORD    system memory in K
  329.  EFh 64 BYTEs    ASCIZ shared program name
  330. 12Fh 64 BYTEs    ASCIZ shared program data file
  331. 16Fh    BYTE    flags1
  332.         bit 7: writes text directly to screen
  333.         bit 6: runs in foreground only
  334.         bit 5: uses math coprocessor
  335.         bit 4: accesses system keyboard buffer directly
  336.         bits 3-1: reserved (0)
  337.         bit 0: swappable
  338. 170h    BYTE    flags2
  339.         bit 6: uses command-line parameters in field at A5h
  340.         bit 5: swaps interrupt vectors
  341. ---information unique to .DVP files---
  342. 171h  2 BYTEs    keys to use on open menu
  343. 173h    WORD    size of script buffer in bytes
  344. 175h    WORD    automatically give up CPU after this many tests for keyboard
  345.         input in one clock tick (0 = never)
  346. 177h    BYTE    nonzero = "uses own colors"
  347. 178h    BYTE    nonzero if application swappable
  348. 179h  3 BYTEs    reserved (0)
  349. 17Ch    BYTE    nonzero to automatically close on exit
  350. 17Dh    BYTE    nonzero if copy-protect floppy is required
  351. ---information unique to DESQview 2.0+---
  352. 17Eh    BYTE    .DVP version number
  353.         00h DESQview 1.2+
  354.         01h DESQview 2.0+
  355.         02h DESQview 2.2+
  356. 17Fh    BYTE    reserved (0)
  357. 180h    BYTE    initial number of rows in physical window
  358. 181h    BYTE    initial number of columns in physical window
  359. 182h    WORD    maximum expanded memory to allow, in K
  360. 184h    BYTE    flags3
  361.         bit 7: automatically assign window position
  362.         bit 5: maximum memory value has been specified
  363.         bit 4: disallow "Close" command
  364.         bit 3: foreground-only when doing graphics
  365.         bit 2: don't virtualize
  366. 185h    BYTE    keyboard conflict level (0-4)
  367. 186h    BYTE    number of graphics pages used
  368. 187h    WORD    extra system memory size
  369. 189h    BYTE    initial screen mode (FFh = default)
  370. ---information unique to DESQview 2.2+---
  371. 18Ah    BYTE    serial port usage
  372.         FFh uses all serial ports
  373.         00h no serial ports
  374.         01h only COM1
  375.         02h only COM2
  376. 18Bh    BYTE    flags4
  377.         bit 7: automatically close application on exit if .COM or .EXE
  378.             specified
  379.         bit 6: swappable if not using serial ports
  380.         bit 4: start program in background (v2.26+)
  381.         bit 3: virtualize text
  382.         bit 2: virtualize graphics
  383.         bit 1: share CPU when foreground
  384.         bit 0: share EGA when foreground and zoomed
  385. 18Ch    BYTE    protection level for 386 machines
  386. 18Dh 19 BYTEs    reserved (0)
  387. ---------------------------------------------
  388. INT 15 - DESQview 2.0 - KEYBOARD MOUSE CONTROL
  389.     AX = 102Dh
  390.     BL = subfunction
  391.          00h determine whether using keyboard mouse
  392.         Return: BL = 00h using real mouse
  393.                  01h using keyboard mouse
  394.          01h turn keyboard mouse on
  395.          02h turn keyboard mouse off
  396. ---------------------------------------------
  397. INT 15 - TopView commands
  398.     AH = 11h
  399.     AL = various (except 17h)
  400. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  401.       see those below
  402. SeeAlso: AH=DEh
  403. ---------------------------------------------
  404. INT 15 - VMiX - EXECUTE SHELL SYSTEM COMMANDS
  405.     AH = 11h
  406.     STACK:    DWORD    pointer to ASCIZ string containing and VMiX shell
  407.             request (max len = 127)
  408. Return: AX = status
  409. ---------------------------------------------
  410. INT 15 - DESQview 2.2+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  411.     AX = 1117h
  412.     BX = 0000h    get current mapping context without setting
  413.          nonzero    set new mapping context
  414. Return: BX = mapping context in effect before call
  415. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  416.     mapping contexts determine conventional-memory addressability; setting
  417.       a mapping context ensures that the associated program and data areas
  418.       are in memory for access.  Usable by drivers, TSRs and shared
  419.       programs.
  420.     Caller need not be running under DESQview
  421. ---------------------------------------------
  422. INT 15 - DESQview - XDV.COM - INSTALLATION CHECK
  423.     AX = 11DEh
  424. Return: CF clear if installed
  425.         AX = segment at which XDV is located
  426. ---------------------------------------------
  427. INT 15 - VMiX - PUT PROCESS TO SLEEP
  428.     AH = 12h
  429.     STACK:    WORD    process ID
  430. Return: AX = status
  431. ---------------------------------------------
  432. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  433.     AH = 12h
  434.     BH = 00h
  435.     BL = which handle to return
  436.         00h handle in DWORD on top of stack
  437.         01h current task's window handle
  438.         02h given task's mailbox handle (task's handle on stack)
  439.         03h current task's mailbox handle
  440.         04h given task's keyboard handle (task's handle on stack)
  441.         05h current task's keyboard object handle
  442.         06h given task's OBJECTQ handle (task's handle on stack)
  443.         07h current task's OBJECTQ handle
  444.         08h   \
  445.           thru > return 0000:0000
  446.         10h   /
  447. Return: DWORD on top of stack is object handle
  448. ---------------------------------------------
  449. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  450.     AH = 12h
  451.     BH = 01h
  452.     BL = object
  453.         00h (DV 2.0x only) handle is DWORD on top of stack
  454.         01h (DV 2.0x only) use task's window handle
  455.         02h (DV 2.0x only) given task's mailbox (task's handle on stack)
  456.         03h (DV 2.0x only) current task's mailbox
  457.         04h (DV 2.0x only) given task's keyboard (task's handle on stack)
  458.         05h (DV 2.0x only) current task's keyboard object
  459.         08h WINDOW class
  460.         09h MAILBOX class
  461.         0Ah KEYBOARD class
  462.         0Bh TIMER object (counts down 32-bit time in 10ms increments)
  463.         0Fh POINTER object
  464.         10h PANEL object
  465.     STACK: (if window object or WINDOW class)
  466.            DWORD address to jump to (no new task if high word == 0)
  467.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  468.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  469.            DWORD bytes system memory allocation (0 == none, -1 == default)
  470.            DWORD window size, columns
  471.            DWORD window size, rows
  472.            DWORD length of window title
  473.            DWORD address of window title
  474. Return: DWORD on top of stack is new object handle
  475. Note:    if a new task is created, it is started with
  476.       AX = BX = CX = SI = DI = BP = 0
  477.       DX = segment of parent's object handle
  478.       DS = ES = SS = segment of private stack (and new task's handle)
  479. SeeAlso: AH=12h/BH=02h
  480. ---------------------------------------------
  481. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  482.     AH = 12h
  483.     BH = 02h
  484.     BL = object
  485.         00h handle in DWORD on top of stack
  486.         window: close window and free
  487.         timer: free timer
  488.         panel: free panel object
  489.         pointer: free pointer
  490.         01h task's window handle - kills task, never returns
  491.         02h given task's mailbox (task's handle on top of stack)
  492.         03h current task's mailbox
  493.         04h given task's keyboard (task's handle on top of stack)
  494.         05h current task's keyboard object
  495. SeeAlso: AH=12h/BH=01h
  496. ---------------------------------------------
  497. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  498.     AH = 12h
  499.     BX = 0300h
  500.     STACK: DWORD handle of panel object
  501. Return: STACK: DWORD length of directory
  502.            DWORD address of directory
  503.  
  504. Format of panel file:
  505. Offset    Size    Description
  506.  00h  2 BYTEs    C0h C3h
  507.  02h    BYTE    number of panels in file
  508.  03h    for each panel in file:
  509.         8 BYTEs  blank-padded panel name
  510.           DWORD  panel offset in file
  511.           WORD   panel length
  512.     data for panels (each consists of one or more window/query/manager
  513.     streams)
  514.         first byte of each panel must be 1Bh, fifth byte must be E5h
  515. ---------------------------------------------
  516. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET OBJECT HANDLE
  517.     AH = 12h
  518.     BH = 03h
  519.     BL = object
  520.         00h handle in DWORD on top of stack
  521.         02h sender of last msg read from mailbox (task's handle on stack)
  522.         03h sender of last msg read from current task's mailbox
  523. Return: DWORD on stack is handle
  524. SeeAlso: AH=12h/BH=00h
  525. ---------------------------------------------
  526. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  527.     AH = 12h
  528.     BX = 0400h
  529.     STACK: DWORD timer's handle
  530. Return: STACK: DWORD time in 1/100 sec since midnight when timer expires
  531. ---------------------------------------------
  532. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD
  533.     AH = 12h
  534.     BH = 04h
  535.     BL = object
  536.         00h handle is DWORD on top of stack
  537.         window: read next logical line
  538.         mailbox: wait for and get next message
  539.         pointer: wait for and get next message
  540.         01h read the next logical line from task's default window
  541.         02h get next message from mailbox (task's handle on top of stack)
  542.         03h get next message from current task's mailbox
  543.         04h get the next input from keyboard (handle on top of stack)
  544.         05h get the next input from task's default keyboard
  545.         06h wait for input from any object in OBJECTQ (handle on stack)
  546.         07h wait for input from any object in task's default OBJECTQ
  547. Return: STACK: (if objectq) DWORD handle of object with input
  548.            (otherwise)  DWORD number of bytes
  549.                 DWORD address
  550. SeeAlso: AH=12h/BH=05h
  551. ---------------------------------------------
  552. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  553.     AH = 12h
  554.     BX = 0400h
  555.     STACK: DWORD handle of panel object
  556.            DWORD window's handle or 0
  557.            DWORD length of panel name
  558.            DWORD pointer to panel name
  559. Return: STACK: DWORD handle of created keyboard or 0
  560.            DWORD handle of window which was used
  561. Notes:    status of APPLY may be checked with STATUS message
  562.     panel MUST have the following format
  563.       first byte must be 1Bh (i.e. must start with a stream)
  564.       first opcode in stream must be E5h
  565.         single byte arg of opcode is interpreted thus:
  566.           bit 7  \    11 means create new window
  567.           bit 6  /    10 means create new field table for existing window
  568.             01 means use existing window and field table
  569.           bit 5 if set, panel contains a field table 
  570.             (creates a new keyboard and puts it in field mode)
  571.           bit 4 if set, panel contains input fields
  572.           bit 3 if set, panel contains select fields but no input fields
  573. --------------------------------------------
  574. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  575.     AH = 12h
  576.     BH = 05h
  577.     BL = object
  578.         00h handle is DWORD on top of stack
  579.         timer: start timer to end at a specified time
  580.         pointer: move pointer icon to specified position
  581.         02h send message by value/status=0 to mbox (task's handle on stack)
  582.         03h send message by value/status=0 to current task's mailbox
  583.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  584.         05h add input buffer to task's default KEYBOARD queue
  585.         06h add an object to OBJECTQ (handle on top of stack)
  586.         07h add an object to task's default OBJECTQ
  587.     STACK: (if mailbox)  DWORD length
  588.                  DWORD address
  589.            (if keyboard) DWORD status (such as scan code)
  590.                  DWORD length
  591.                  DWORD address
  592.            (if objectq)  DWORD handle of object to add
  593.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  594.                    only accurate to 1/18 sec)
  595.            (if pointer)  DWORD column relative to origin of window
  596.                  DWORD row relative to origin of window
  597. SeeAlso: AH=12h/BH=04h
  598. ---------------------------------------------
  599. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  600.     AH = 12h
  601.     BH = 05h
  602.     BL = object
  603.         00h DWORD on top of stack is window handle
  604.         01h write string to task's default window
  605.     STACK: DWORD object handle if handle passed on stack
  606.            DWORD total length of string (high word == 0)
  607.            DWORD address of string to display
  608. Return: indicated actions performed
  609.     a. non-control characters are displayed
  610.     b. CR/LF/BS/Tab cause the usual cursor movement
  611.     c. ESC starts a data structure with additional commands
  612. Note:    service routine will pop stack
  613.  
  614. Data Structure:
  615.     MAGIC  DB  1Bh
  616.     MODE   DB  ?   ; 00h, 01h, 10h, 14h-1Fh legal
  617.     LENGTH DW  ?   ; length of remainder in bytes
  618.     var-length fields follow, each an OPCODE followed by
  619.          zero or more args
  620.  
  621. MODE 00h (set or display values) "WINDOW STREAM"
  622.     Opcodes:args
  623.     00h  display 20h blanks with the default attribute
  624.     01h-1Fh display OPCODE blanks with the default attribute
  625.     20h  display char with default attribute 20h times
  626.          BYTE char to repeat
  627.     21h-3Fh display char with default attribute OPCODE-20h times
  628.          BYTE char to repeat
  629.     40h  display 20h blanks with specified attribute
  630.          BYTE attribute of blanks
  631.     41h-5Fh display OPCODE-40h blanks with specified attribute
  632.          BYTE attribute of blanks
  633.     60h  display next 20h characters
  634.          20h BYTES characters to display
  635.     61h-7Fh display next OPCODE-60h characters
  636.          N BYTES characters to display
  637.     80h-87h  display N blanks with default attribute
  638.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  639.               [000h means 800h]
  640.     88h-8Fh display N copies of the character
  641.          BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  642.               [000h means 800h]
  643.          BYTE character to repeat
  644.     90h-97h  display N blanks with specified attribute
  645.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  646.               [000h means 800h]
  647.          BYTE attribute
  648.     98h-9FH  display string at logical cursor pos
  649.          BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  650.               [000h means 800h]
  651.          N BYTES string to display
  652.     A0h  set logical cursor row
  653.          BYTE row number (0 is top)
  654.     A1h  set logical cursor column
  655.          BYTE column number (0 is leftmost)
  656.     A2h  set top edge of scrolling region
  657.          BYTE row
  658.     A3h  set left edge of scrolling region
  659.          BYTE column
  660.     A4h  set row of physical window position
  661.          BYTE line
  662.     A5h  set column of physical window position
  663.          BYTE column
  664.     A6h  set height of physical window
  665.          BYTE #rows
  666.     A7h  set width of physical window
  667.          BYTE #columns
  668.     A8h  set viewport row
  669.          BYTE row
  670.     A9h  set viewport column
  671.          BYTE column
  672.     AAh  set virtual screen height
  673.          BYTE rows
  674.     ABh  set virtual screen width
  675.          BYTE columns
  676.     ACh-AEh  unused
  677.     AFh  set compatible/preferred video modes
  678.          BYTE compatibility/preference mask
  679.         bit 7    compatible with monochrome
  680.         bit 6    compatible with color text, EGA/VGA graphics
  681.         bit 5    compatible with medium-resolution CGA graphics
  682.         bit 4    compatible with high-resolution CGA graphics
  683.         bit 3    prefer monochrome
  684.         bit 2    prefer color text, EGA/VGA graphics
  685.         bit 1    prefer medium-resolution CGA graphics
  686.         bit 0    prefer high-resolution CGA graphics
  687.     B0h  move logical cursor down
  688.          BYTE #rows (signed, negative values move up)
  689.     B1h  move logical cursor right
  690.          BYTE #cols (signed, negative values move left)
  691.     B2h  shift top edge of scrolling region
  692.          BYTE #rows (signed)
  693.     B3h  shift left edge of scrolling region
  694.          BYTE #cols (signed)
  695.     B4h  shift window down
  696.          BYTE #lines (signed)
  697.     B5h  shift window right
  698.          BYTE #columns (signed)
  699.     B6h  expand physical window vertically
  700.          BYTE #lines (signed)
  701.     B7h  expand physical window horizontally
  702.          BYTE #columns (signed)
  703.     B8h  adjust viewport row
  704.          BYTE #rows (signed)
  705.     B9h  adjust viewport column
  706.          BYTE #columns (signed)
  707.     BAh  adjust virtual screen height
  708.          BYTE #rows to increase (signed)
  709.     BBh  adjust virtual screen width
  710.          BYTE #cols to increase (signed)
  711.     BCh-BFh  unused
  712.     C0h  set logical cursor position
  713.          BYTE row number (0 is top border)
  714.          BYTE column number (0 is left border)
  715.     C1h  set top left corner of scrolling region
  716.          BYTE row
  717.          BYTE column
  718.     C2h  set window pos
  719.          BYTE upper left row (no top border if 0)
  720.          BYTE upper left column (no left border if 0)
  721.     C3h  set current window size
  722.          BYTE #rows
  723.          BYTE #cols
  724.     C4h  set upper left corner of viewport (portion of virtual screen
  725.          displayed in window)
  726.          BYTE row
  727.          BYTE column
  728.     C5h  set size of virtual screen
  729.          BYTE #rows
  730.          BYTE #cols
  731.     C6h  unused
  732.     C7h  unused
  733.     C8h  set logical cursor relative to current position
  734.          BYTE number of rows to move down (signed)
  735.          BYTE number of columns to move right (signed)
  736.     C9h  shift top left corner of scrolling region
  737.          BYTE #rows (signed)
  738.          BYTE #cols (signed)
  739.     CAh  set window pos relative to current position
  740.          BYTE number of rows to shift down (signed)
  741.          BYTE number of columns to shift right (signed)
  742.     CBh  set window size relative to current size
  743.          BYTE number of rows to expand (signed)
  744.          BYTE number of cols to expand (signed)
  745.     CCh  shift viewport relative to current position
  746.          BYTE rows to shift (signed)
  747.          BYTE cols to shift (signed)
  748.     CDh  resize virtual screen
  749.          BYTE #rows to expand (signed)
  750.          BYTE #cols to expand (signed)
  751.     CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  752.     CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  753.     D0h  allow window frame to extend beyond screen
  754.     D1h  always display a complete frame, even if window extends beyond 
  755.          edge of screen
  756.     D2h  allow DV to change colors on video mode switch (default)
  757.     D3h  application changes colors
  758.     D4h  window is visible
  759.     D5h  window is hidden
  760.     D6h  window has frame
  761.     D7h  window unframed
  762.     D8h  read characters from window (default)
  763.     D9h  read attributes from window
  764.     DAh  use logical attributes, which may be remapped
  765.         attributes
  766.            1 normal text
  767.            2 highlighted normal text
  768.            3 help text
  769.            4 highlighted help text
  770.            5 error message
  771.            6 highlighted error message
  772.            7 emphasized text
  773.            8 marked text
  774.            9-16 are reverse video versions of 1-8
  775.     DBh  use physical attributes for characters
  776.     DCh  enable special actions for control characters (default)
  777.     DDh  disable special control char handling, all chars displayable by
  778.          BIOS TTY call
  779.     DEh  write both character and attribute (default)
  780.     DFh  write character only, leave attribute untouched
  781.     E0h  repeat following commands
  782.          BYTE number of times
  783.     E1h  end of commands to repeat, start repeating them
  784.     E2h  set color
  785.          BYTE color
  786.     E3h  clear virtual screen
  787.     E4h  redraw window
  788.     E5h  select menu style
  789.          BYTE style
  790.         bits 5,4 = 01 use two-letter menu entries for remainder of
  791.           this stream
  792.     E5h  (panel file only)
  793.          BYTE modifier
  794.         bits 7,6 = 11 panel goes in new window
  795.              = 01 panel uses existing window
  796.         bit 5 = 1 create new keyboard in field mode
  797.         bit 4 = 1 make newly-created keyboard active
  798.         bit 3 reserved
  799.         bit 2 = 1 stream defined exclusive input window (DV 2.2)
  800.         bit 1 reserved
  801.         bit 0 reserved
  802.     E6h  create new window and perform rest of manipulations in new window
  803.          BYTE number of rows
  804.          BYTE number of columns
  805.          Return: DWORD object handle returned on stack at end
  806.     E7h  unused
  807.     E8h  scroll area up (top left corner defined by opcode C1h)
  808.          BYTE height
  809.          BYTE width
  810.     E9h  scroll area down (top left corner defined by opcode C1h)
  811.          BYTE height
  812.          BYTE width
  813.     EAh  scroll area left (top left corner defined by opcode C1h)
  814.          BYTE height
  815.          BYTE width
  816.     EBh  scroll area right (top left corner defined by opcode C1h)
  817.          BYTE height
  818.          BYTE width
  819.     ECh  set logical attributes for window contents
  820.          BYTE video modes command applies to
  821.         bit 7    monochrome
  822.         bit 6    color text, EGA/VGA graphics
  823.         bit 5    medium-resolution CGA graphics
  824.         bit 4    high-resolution CGA graphics
  825.          BYTE which attributes to set
  826.         bit 7  if set, copy single following byte to indicated attrs
  827.         bits 4-6  # of first attribute to change - 1
  828.         bits 0-3  # of consecutive attributes to change
  829.          N BYTEs new attributes
  830.     EDh  set logical attributes for window frame
  831.          BYTE video modes command applies to (see opcode ECh)
  832.          BYTE which attributes to set
  833.         bit 7  if set, copy single following byte to indicated attrs
  834.         bits 4-6  # of first attribute to change - 1
  835.         bits 0-3  # of consecutive attributes to change
  836.          N BYTEs new attributes
  837.           attributes
  838.                1 = top left corner
  839.                2 = top right corner
  840.                3 = bottom left corner
  841.                4 = bottom right corner
  842.                5 = top edge
  843.                6 = bottom edge
  844.                7 = left edge
  845.                8 = right edge
  846.     EEh  set characters for window frame
  847.          BYTE video modes command applies to (see opcode ECh)
  848.          BYTE which characters to set
  849.         bit 7  if set, copy single following byte to indicated chars
  850.         bits 4-6  # of first char to change - 1
  851.         bits 0-3  # of consecutive chars to change
  852.          N BYTEs new chars (same relative position as attributes above)
  853.     EFh  set window name
  854.          BYTE length of name
  855.          N BYTEs name
  856.     F0h  clear input field to blanks
  857.          BYTE field number
  858.     F1h  fill input field with character
  859.          BYTE field number
  860.          BYTE char
  861.     F2h  set color of input field
  862.          BYTE field number (1-N)
  863.          BYTE attribute
  864.     F3h  set initial contents of input field
  865.          BYTE field number (1-N)
  866.          N BYTEs enough chars to exactly fill field as defined by op FFh
  867.     F4h  position cursor to specific input field
  868.          BYTE field number (1-N)
  869.     F5h  change field table entry
  870.          BYTE field number
  871.          7-8 BYTEs field table entry (see opcode FFh below)
  872.     F6h  set field type
  873.          BYTE field number
  874.          BYTE type
  875.     F7h  "broadcast write"    write data to fields with broadcast bit set
  876.         in field table entry, in field number order
  877.          N BYTEs (total length of all program output fields)
  878.     F8h  scroll field up a line
  879.          BYTE field number
  880.     F9h  scroll field down a line
  881.          BYTE field number
  882.     FAh  scroll field left
  883.          BYTE field number
  884.     FBh  scroll field right
  885.          BYTE field number
  886.     FCh  set field table header
  887.          BYTE number of fields
  888.          BYTE screen behavior bits
  889.         bit 7  reserved
  890.         bit 6  set if menu items may be selected via keyboard
  891.         bit 5  set if left mouse button may terminate entry
  892.         bit 4  set if right mouse button may terminate entry
  893.         bit 3  if set, select fields return contents or blanks rather
  894.             than 'Y' or 'N'
  895.         bit 2  if set, modified bits reset on return to application
  896.         bits 0,1 = 00 no data returned on read of keyboard
  897.                01 data returned as array of chars containing
  898.                 all fields packed together, with no field
  899.                 numbers
  900.                10 data returned as numbered variable-length
  901.                 records for all fields
  902.                11 data returned as numbered variable-length
  903.                 records for the fields which were modified
  904.          BYTE current input field (updated by DESQview)
  905.          BYTE current select field (updated by DESQview)
  906.          BYTE attribute for select fields when they are pointed at
  907.          BYTE attribute for select fields which have been selected
  908.     FDh  reset modified bit for all fields
  909.     FEh  reset selected and modified bits for all fields
  910.     FFh  set up input fields
  911.          6 BYTEs table header (see opcode FCh above)
  912.          the field table entries, one for each field
  913.          BYTE start row    \
  914.          BYTE start column  \ if menu selection and start is to
  915.          BYTE end row        / right or below end, select from kbd only
  916.          BYTE end column   /
  917.          BYTE field type
  918.             bits 7,6 = 00 inactive (non-entry) field
  919.                    01 echos keystrokes input to make menu selection
  920.                    10 fill-in field
  921.                    11 select field
  922.             bit 5  field can be filled by broadcast write (F7h opcode)
  923.             bit 4  reserved
  924.             bit 3  reserved
  925.             bit 2  reserved
  926.             bit 1  set if field selected
  927.             bit 0  set if field modified
  928.          BYTE modifier
  929.               if type is fill-in, then bit flags to determine behavior
  930.               bit 7  if set, automatically enter CR when field full
  931.               bit 6  move to next field when current field is full
  932.               bit 5  if set, enter text from right end (for numbers)
  933.               bit 4  if set, force input to uppercase
  934.               bit 3  if set, clear old contents on first keystroke
  935.               bit 2  if set, input returned when cursor moves out
  936.                  of modified field (API level 2.02+)
  937.               bit 1  reserved
  938.               bit 0  reserved
  939.               if select field, first key to press to activate
  940.               00h if have to point-&-click or is an extended-ASCII
  941.                   keystroke (only if two-key menus enabled)
  942.          BYTE (select field only) normal color of field
  943.          BYTE second key for select field.  This byte is present iff
  944.               two-letter menu entries selected with opcode E5h, and
  945.               in that case is present regardless of field type
  946.          Note: DESQview uses and updates the actual copy of the information
  947.            which is contained in the stream.  Thus this info must remain
  948.            intact until after the data entry is complete.
  949.  
  950. MODE 01h "QUERY STREAM" (valid only for those opcodes listed here)
  951.     A0h return logical cursor row in next byte
  952.     A1h return logical cursor column in next byte
  953.     A2h return top row of scrolling region in next byte
  954.     A3h return left column of scrolling region in next byte
  955.     A4h return row of physical window origin in next byte
  956.     A5h return column of physical window origin in next byte
  957.     A6h return height of physcial window in next byte
  958.     A7h return width of physical window in next byte
  959.     A8h return row of viewport origin in next byte
  960.     A9h return column of viewport origin in next byte
  961.     AAh return height of virtual screen in next byte
  962.     ABh return width of virtual screen in next byte
  963.     AFh return current video mode in next byte
  964.     C0h return current logical cursor position in next two bytes
  965.     C1h return top left corner of scrolling region in next two bytes
  966.     C2h return current window position in next two bytes
  967.     C3h return current window size in next two bytes
  968.     C4h return current viewport origin in next two bytes
  969.     C5h return current virtual screen size in next two bytes
  970.     D0h \ overwritten with D0h if frames may fall off screen edge
  971.     D1h /               D1h if frames always displayed entirely
  972.     D2h \ overwritten with D2h if DESQview controls color palette
  973.     D3h /               D3h if application changes color palette
  974.     D4h \ overwritten with D4h if window visible
  975.     D5h /               D5h if window hidden
  976.     D6h \ overwritten with D6h if window has frame
  977.     D7h /               D7h if window unframed
  978.     D8h \ overwritten with D8h if reading characters from window
  979.     D9h /               D9h if reading attributes from window
  980.     DAh \ overwritten with DAh if using logical attributes
  981.     DBh /               DBh if using physical attributes
  982.     DCh \ overwritten with DCh if TTY control char interpretation on
  983.     DDh /               DDh if TTY control char interpretation off
  984.     DEh \ overwritten with DEh if writing both characters and attributes
  985.     DFh /               DFh if leaving attributes untouched
  986.     E2h return current color in next byte
  987.     ECh get logical attributes for window contents
  988.         BYTE execute call if currently in specified video mode
  989.         bit 7    monochrome
  990.         bit 6    color text, EGA/VGA graphics
  991.         bit 5    medium-resolution CGA graphics
  992.         bit 4    high-resolution CGA graphics
  993.         BYTE which attributes to get
  994.         bit 7 unused???
  995.         bits 4-6 first attribute to get - 1
  996.         bits 0-3 # consecutive attributes
  997.         N BYTEs buffer to hold attributes
  998.     EDh get logical attributes for window frame
  999.         BYTE execute call if currently in video mode (see opcode ECh)
  1000.         BYTE which attributes to get
  1001.         bit 7 unused???
  1002.         bits 4-6 first attribute to get - 1
  1003.         bits 0-3 # consecutive attributes
  1004.         N BYTEs buffer to hold attributes
  1005.     EEh get characters for window frame
  1006.         BYTE execute call if currently in video mode (see opcode ECh)
  1007.         BYTE which attributes to get
  1008.         bit 7 unused???
  1009.         bits 4-6 first char to get - 1
  1010.         bits 0-3 # consecutive chars
  1011.         N BYTEs buffer to hold chars
  1012.     EFh return current window name
  1013.         BYTE    max length of returned name
  1014.         N BYTEs buffer to hold window name
  1015.     F3h return contents of input field
  1016.         BYTE field number
  1017.         N BYTEs buffer to hold field contents (size exactly equal to field
  1018.             size)
  1019.     F5h get field table entry
  1020.         BYTE field number
  1021.         7-8 BYTEs buffer to hold field table entry
  1022.     F6h get type of a field
  1023.         BYTE field number
  1024.         BYTE type
  1025.     FCh get field table header
  1026.         6 BYTEs buffer to store header
  1027.  
  1028. MODE 10h "MANAGER STREAM" (valid only for opcodes listed here)
  1029.     00h allow window to be moved horizontally
  1030.     01h allow window to be moved vertically
  1031.     02h allow window to change width
  1032.     03h allow window to change height
  1033.     04h allow window to be scrolled horizontally
  1034.     05h allow window to be scrolled vertically
  1035.     06h allow "Close Window" menu selection
  1036.     07h allow window to be hidden
  1037.     08h allow "Mark" menu
  1038.     0Eh allow "Scissors" menu
  1039.     10h allow DESQview main menu to be popped up
  1040.     11h allow "Switch Windows" menu
  1041.     12h allow "Open Window" menu
  1042.     13h allow "Quit" menu selection
  1043.     20h-33h opposite of 00h-13h, disallow specified action
  1044.     40h notify if horizontal position of window changes
  1045.     41h notify if vertical position of window changes
  1046.     42h notify if width of window changes
  1047.     43h notify if height of window changes
  1048.     44h notify if window scrolled horizontally
  1049.     45h notify if window scrolled vertically
  1050.     46h notify if window is closed--program has to clean up and exit itself
  1051.     47h notify if window is hidden
  1052.     48h notify if "?" on main menu selected
  1053.     49h notify if pointer message sent to window
  1054.     4Ah notify if window is made active
  1055.     4Bh notify if window is switched away from
  1056.     4Ch notify if video mode changes
  1057.     4Dh notify if "Scissors" menu "Cut" option selected
  1058.     4Eh notify if "Scissors" menu "Copy" option selected
  1059.     4Fh notify if "Scissors" menu "Paste" option selected
  1060.     50h notify if DESQview main menu popped up
  1061.     51h notify if DESQview main menu popped down
  1062.     60h-71h  opposite of 40h-51h: don't notify on specified event
  1063.     84h attach window to parent task's window (both move together)
  1064.     85h detach window from parent task's window (may move independently)
  1065.     86h disable background operation
  1066.     87h enable running in background
  1067.     88h set minimum size of physical window
  1068.         BYTE rows
  1069.         BYTE columns
  1070.     89h set maximum size of physical window
  1071.         BYTE rows
  1072.         BYTE cols
  1073.     8Ah set primary asynchronous notification routine
  1074.         DWORD address of routine, 0000h:0000h means none
  1075.           on entry ES:DI = handle of window, DS:SI is 32-bit value set
  1076.           by 8Bh opcode
  1077.                mailbox contains message indicating event
  1078.                   Opcode
  1079.                    40h  horizontal movement
  1080.                    DWORD object handle of window
  1081.                    BYTE  new row
  1082.                    BYTE  new col
  1083.                    41h  vertical movement
  1084.                    DWORD object handle of window
  1085.                    BYTE  new row
  1086.                    BYTE  new col
  1087.                    42h  horizontal size change
  1088.                    DWORD object handle of window
  1089.                    BYTE  new rows
  1090.                    BYTE  new cols
  1091.                    43h  vertical size change
  1092.                    DWORD object handle of window
  1093.                    BYTE  new rows
  1094.                    BYTE  new cols
  1095.                    44h  scrolled horizontally
  1096.                    DWORD object handle of window
  1097.                    BYTE  mouse row within window
  1098.                    BYTE  mouse column within window
  1099.                    BYTE  field mouse is on, 0 if none
  1100.                    BYTE  amount moved: >0 right, <0 left, 0 done
  1101.                    45h  scrolled vertically
  1102.                    DWORD object hande of window
  1103.                    BYTE  mouse row within window
  1104.                    BYTE  mouse column within window
  1105.                    BYTE  field mouse is on, 0 if none
  1106.                    BYTE  amount moved: >0 down, <0 up, 0 done
  1107.                    46h  window closed
  1108.                    DWORD object handle of window
  1109.                    BYTE  mouse pointer row
  1110.                    BYTE  mouse pointer column
  1111.                    BYTE  field mouse is on, 0 if none
  1112.                    47h  window hidden
  1113.                    48h  Help for Program selected
  1114.                    DWORD object handle of window
  1115.                    BYTE  mouse pointer row
  1116.                    BYTE  mouse pointer column
  1117.                    BYTE  field mouse is on, 0 if none
  1118.                    49h  pointer message sent to window
  1119.                    4Ah  switched to window from another ("raise")
  1120.                    4Bh  switched away from the window ("lower")
  1121.                    4Ch  video mode changed
  1122.                    BYTE new video mode
  1123.                    4Dh  Scissors/cUt selected
  1124.                    DWORD object handle of window
  1125.                    BYTE  row of upper left corner
  1126.                    BYTE  column of upper left corner
  1127.                    BYTE  field number ul corner is in, 0=none
  1128.                    DWORD handle of orphaned window created to
  1129.                      hold data
  1130.                    BYTE  height of region
  1131.                    BYTE  width of region
  1132.                    4Eh  Scissors/Copy selected
  1133.                    DWORD object handle of window
  1134.                    BYTE  row of upper left corner
  1135.                    BYTE  column of upper left corner
  1136.                    BYTE  field number ul corner is in, 0=none
  1137.                    DWORD handle of orphaned window created to
  1138.                      hold data
  1139.                    BYTE  height of region
  1140.                    BYTE  width of region
  1141.                    4Fh  Scissors/Paste selected
  1142.                    DWORD object handle of window
  1143.                    BYTE  row of upper left corner
  1144.                    BYTE  column of upper left corner
  1145.                    BYTE  field number ul corner is in, 0=none
  1146.                    DWORD handle of orphaned window with data
  1147.                    BYTE  height of region
  1148.                    BYTE  width of region
  1149.                    50h  main menu popped up
  1150.                    51h  main menu popped down
  1151.           routine should restore all registers before returning
  1152.     8Bh set async notification parameter
  1153.         DWORD 32-bit value passed to async routine in DS:SI
  1154.     ACh (DV2.2) perform regular select field attribute processing
  1155.     ADh (DV2.2) protect attributes in selected field from being lost
  1156.     AEh make window default notify window for owning app (API level 2.00+)
  1157.     AFh set selected field marker character
  1158.         BYTE character to display at left edge of selected fields
  1159.     BCh set standard field processing mode 
  1160.     BDh set alternate field processing mode (enables cursor pad for menus)
  1161.     BEh enables changing reverse logical attributes with ECh opcode
  1162.     BFh disables changing reverse logical attributes with ECh opcode
  1163.     C0h make current window topmost in system
  1164.     C1h force current process into foreground
  1165.     C2h make current window topmost in process
  1166.     C3h position mouse pointer relative to origin of current field
  1167.         BYTE rows below upper left corner of field
  1168.         BYTE columns to right of upper left corner of field
  1169.     C4h position mouse pointer relative to origin of given field
  1170.         BYTE field number
  1171.         BYTE rows below upper left corner of field
  1172.         BYTE columns to right of upper left corner of field
  1173.     C5h hide current window
  1174.     C6h show windows for this process
  1175.     C7h hide all windows for this process
  1176.     C8h suspend process and hide all its windows
  1177.     C9h force current process into background
  1178.     CAh make current window bottom-most in process
  1179.     CBh cancel current window manager operation, remove DV menu, give 
  1180.         control to topmost application
  1181.     CCh close window
  1182.     CEh reorder windows
  1183.         DWORD pointer to null-terminated list of words
  1184.           each word is segment of object handle for a window
  1185.  
  1186. MODES 14h to 1Fh "USER STREAMS"
  1187.     normally NOPs, but may be defined by SETESC message to invoke FAR
  1188.     routines, one for each mode number
  1189.       on entry to handler,
  1190.         DS:SI = first byte of actual stream (not header)
  1191.         CX = #bytes in stream
  1192.         ES:DI = window's handle
  1193. ---------------------------------------------
  1194. INT 15 - DESQview 2.2 - SEND MESSAGE - SET PRIORITY
  1195.     AH = 12h
  1196.     BH = 06h
  1197.     BL = object
  1198.         00h object handle in DWORD on top of stack
  1199.     STACK: DWORD new priority of object in task's OBJECTQ 
  1200. SeeAlso: AH=12h/BH=07h
  1201. ---------------------------------------------
  1202. INT 15 - DESQview 2.2 - SEND MESSAGE - GET PRIORITY
  1203.     AH = 12h
  1204.     BH = 07h
  1205.     BL = object
  1206.         00h object handle in DWORD on top of stack
  1207. Return: STACK: DWORD object priority
  1208. Note:    initially all objects have the same default value.  Should make 
  1209.     relative adjustments to this default value.
  1210. SeeAlso: AH=12h/BH=06h
  1211. ---------------------------------------------
  1212. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  1213.     AH = 12h
  1214.     BH = 08h
  1215.     BL = object
  1216.         00h handle in DWORD on top of stack
  1217.         timer: elapsed time since timer started
  1218.         pointer: number of messages queued to pointer object
  1219.         panel: number of panels in panel file
  1220.         01h total chars in current task's default window
  1221.         02h number of messages in task's mailbox (task's handle on stack)
  1222.         03h number of messages in current task's mailbox
  1223.         04h number of input buffers queued in task's kbd (handle on stack)
  1224.         05h number of input buffers queued for current task's default kbd
  1225.         06h number of objects queued in OBJECTQ (task's handle on stack)
  1226.         07h number of objects queued in current task's OBJECTQ
  1227. Return: DWORD on stack is result
  1228. SeeAlso: AH=12h/BH=09h
  1229. ---------------------------------------------
  1230. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  1231.     AH = 12h
  1232.     BH = 09h
  1233.     BL = object
  1234.         00h handle in DWORD on top of stack
  1235.         window: chars/line
  1236.         timer: timer remaining before timer expires
  1237.         01h number of chars/line in current task's default window
  1238. Return: DWORD on top of stack is length
  1239. SeeAlso: AH=12h/BH=08h
  1240. ---------------------------------------------
  1241. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  1242.     AH = 12h
  1243.     BH = 0Ah
  1244.     BL = object
  1245.         00h handle is DWORD on top of stack
  1246.         window: write characters and attributes
  1247.         timer: start timer for specified interval
  1248.         pointer: set control flags
  1249.         01h write characters and attributes to task's default window
  1250.         02h send message/status by value to mailbox (task's handle on stack)
  1251.         03h send message/status by value to current task's default mailbox
  1252.         04h set control flags on KEYBOARD object (handle on top of stack)
  1253.         05h set control flags on task's default KEYBOARD object
  1254.     STACK: (if mailbox) DWORD status
  1255.                 DWORD length of message
  1256.                 DWORD address
  1257.            (if timer)   DWORD duration in 1/100 seconds
  1258.            (if window)  DWORD count of characters
  1259.                 DWORD address of characters
  1260.                 DWORD count of attributes
  1261.                 DWORD address of attributes
  1262.            (otherwise)  DWORD bits to set
  1263. For keyboard objects, the bits have the following significance:
  1264.     bit 15 reserved, can't be set
  1265.     bit 14 unused
  1266.     bit 13 reserved, can't be set
  1267.     bit 12-5 unused
  1268.     bit 4  filter all keys (used with handler established by SETESC)
  1269.     bit 3  program continues executing while input in progress
  1270.     bit 2  insert mode active
  1271.     bit 1  keyboard is active
  1272.     bit 0  keyboard is in field mode
  1273. For pointer objects, the bits have the following significance:
  1274.     bit 15 reserved, can't be set
  1275.     bit 14-8 unused
  1276.     bit 7  mouse pointer is hidden while in window
  1277.     bit 6  get messages even if window not topmost
  1278.     bit 5  get messages even if window not foreground
  1279.     bit 4  mouse button must be held 1/2 second before it "clicks"
  1280.     bit 3  pointer position is relative to screen origin, not window origin
  1281.     bit 2  send message on button release as well as button press
  1282.     bit 1  unused???
  1283.     bit 0  send message only on button activity, not movement
  1284.            DV-specific, and INT 15h/AX=DE0Fh must have been called first
  1285. SeeAlso: AH=12h/BH=0Bh
  1286. ---------------------------------------------
  1287. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  1288.     AH = 12h
  1289.     BH = 0Bh
  1290.     BL = object
  1291.         00h handle is DWORD on top of stack
  1292.         window:  write attributes only
  1293.         mailbox: send message by reference
  1294.         pointer: reset control flags
  1295.         01h write attributes only to task's default window
  1296.         02h send msg/status by reference to mailbox (task's handle on stack)
  1297.         03h send msg/status by reference to current task's mailbox
  1298.         04h clear control flags on KEYBOARD object (handle on top of stack)
  1299.         05h clear control flags on task's default KEYBOARD object
  1300.         06h remove specific object from OBJECTQ (task's handle on stack)
  1301.         07h remove specific object from task's default OBJECTQ
  1302.     STACK: (if mailbox) DWORD status
  1303.                 DWORD length
  1304.                 DWORD address
  1305.            (if window)  DWORD number of attributes to write
  1306.                 DWORD address of attributes
  1307.            (if objectq) DWORD handle of object to remove
  1308.            (otherwise)  DWORD indicates which bits to clear
  1309. SeeAlso: AH=12h/BH=0Ah
  1310. ---------------------------------------------
  1311. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  1312.     AH = 12h
  1313.     BH = 0Ch
  1314.     BL = object
  1315.         00h handle is DWORD on top of stack
  1316.         window:   fill with given character
  1317.         keyboard: attach to a window
  1318.         timer:      open
  1319.         pointer:  start taking input for window
  1320.         panel:      associate with a panel file
  1321.         01h fill task's default window with given character
  1322.         02h open given task's mailbox for input (task's handle on stack)
  1323.         03h open current task's mailbox
  1324.         04h attach a KEYBOARD to a window (handle on top of stack)
  1325.         05h attach task's default KEYBOARD to a window
  1326.         06h open a task's OBJECTQ (task's handle on top of stack)
  1327.         07h open current task's OBJECTQ
  1328.      STACK: (if window)   DWORD character to fill with
  1329.         (if keyboard) DWORD handle of window to attach to
  1330.         (if pointer)  DWORD handle of window to attach to
  1331.         (if panel)    DWORD length of filename
  1332.                   DWORD address of filename
  1333.         (otherwise)   nothing
  1334. Notes: special action taken if first byte of panel file name is 1Bh
  1335.        if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  1336.      the panel file
  1337.        result code of open may be retrieved with STATUS message
  1338. SeeAlso: AH=12h/BH=0Dh
  1339. ---------------------------------------------
  1340. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  1341.     AH = 12h
  1342.     BH = 0Dh
  1343.     BL = object
  1344.         00h handle is DWORD on top of stack
  1345.         timer:      close
  1346.         keyboard: detach from window
  1347.         pointer:  stop taking input
  1348.         panel:      close
  1349.         02h close given task's mailbox (task's handle on top of stack)
  1350.         03h close task's default mailbox
  1351.         04h close KEYBOARD object (handle on top of stack)
  1352.         05h close task's default KEYBOARD
  1353.         06h close givent task's OBJECTQ (task's handle on top of stack)
  1354.         07h close current task's OBJECTQ
  1355. SeeAlso: AH=12h/BH=0Ch
  1356. ---------------------------------------------
  1357. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  1358.     AH = 12h
  1359.     BH = 0Eh
  1360.     BL = object
  1361.         00h handle is DWORD on top of stack
  1362.         window:   clear
  1363.         keyboard: discard input
  1364.         timer:      cancel current interval
  1365.         pointer:  discard all pending messages
  1366.         01h clear task's default window
  1367.         02h discard all queued messages in mailbox (handle on top of stack)
  1368.         03h discard all queued messages in current task's default mailbox
  1369.         04h discard all input queued to KEYBOARD (handle on top of stack)
  1370.         05h discard all input queued to task's default KEYBOARD
  1371.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  1372.         07h remove all objects from current task's OBJECTQ
  1373. SeeAlso: AH=12h/BH=02h
  1374. ---------------------------------------------
  1375. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  1376.     AH = 12h
  1377.     BH = 0Fh
  1378.     BL = object
  1379.         00h handle is DWORD on top of stack
  1380.         timer:     is it running?
  1381.         pointer: return status of last message
  1382.         panel:     verify success of last OPEN or APPLY
  1383.         02h return status of last msg READ from mailbox (handle on stack)
  1384.         03h return status of last msg READ from task's default mailbox
  1385.         04h get status of last msg from task's KEYBOARD (task handle on stk)
  1386.         05h get status of last msg from task's default KEYBOARD
  1387.         06h return whether OBJECTQ is open or not (handle on top of stack)
  1388.         07h return whether task's default OBJECTQ is open or not
  1389. Return: DWORD on top of stack is status
  1390. Note:    if object is a panel object, the status indicates the error code:
  1391.       14h panel name not in panel directory
  1392.       15h not enough memory to apply panel
  1393.       16h invalid panel format
  1394.       17h panel file already open
  1395.       81h-92h  DOS error codes+80h
  1396.       95h not enough memory to open panel file
  1397.       98h null panel file name
  1398. ---------------------------------------------
  1399. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  1400.     AH = 12h
  1401.     BH = 10h
  1402.     BL = object
  1403.         00h handle is DWORD on top of stack
  1404.         01h returns TRUE if logical cursor past end of task's def window
  1405.         02h return ??? for task's mailbox (task's handle on top of stack)
  1406.         03h return ??? for current task's mailbox
  1407. Return: DWORD on top of stack is status
  1408. ---------------------------------------------
  1409. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  1410.     AH = 12h
  1411.     BH = 11h
  1412.     BL = object
  1413.         00h window's handle is DWORD on top of stack
  1414.         01h position logical cursor on task's default window
  1415.     STACK: DWORD column
  1416.            DWORD row
  1417. ---------------------------------------------
  1418. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  1419.     AH = 12h
  1420.     BH = 11h
  1421.     BL = mailbox to name
  1422.         00h DWORD on top of stack is mailbox handle
  1423.         02h use given task's mailbox (task's handle on top of stack)
  1424.         03h use current task's default mailbox
  1425.     STACK: DWORD length of name
  1426.            DWORD address of name
  1427. SeeAlso: AX=DE0Eh
  1428. ---------------------------------------------
  1429. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  1430.     AH = 12h
  1431.     BX = 1100h
  1432.     STACK: DWORD object handle for pointer object
  1433.            DWORD number of colums to scale pointer position to
  1434.            DWORD number of rows to scale pointer position to
  1435. SeeAlso: AH=12h/BX=1200h
  1436. ---------------------------------------------
  1437. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  1438.     AH = 12h
  1439.     BH = 12h
  1440.     BL = object
  1441.         00h handle is DWORD on top of stack
  1442.         01h read next N chars/attributes on task's default window
  1443.     STACK: DWORD count
  1444. Return: STACK: DWORD width of screen line
  1445.            DWORD address
  1446.            DWORD count actually read
  1447. SeeAlso: AH=12h/BH=04h
  1448. ---------------------------------------------
  1449. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  1450.     AH = 12h
  1451.     BX = 1200h
  1452.     STACK: DWORD object handle for pointer
  1453. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  1454.            DWORD pointer pos scaled as if window were this many rows high
  1455. SeeAlso: AH=12h/BX=1100h
  1456. ---------------------------------------------
  1457. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  1458.     AH = 12h
  1459.     BH = 13h
  1460.     BL = window object
  1461.         00h DWORD on top of stack is handle for window to redraw
  1462.         01h redraw task's default window
  1463. ---------------------------------------------
  1464. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  1465.     AH = 12h
  1466.     BX = 1300h
  1467.     STACK: DWORD object handle for pointer
  1468.            DWORD character to use for pointer
  1469. ---------------------------------------------
  1470. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  1471.     AH = 12h
  1472.     BH = 14h
  1473.     BL = message modifier
  1474.         00h handle is DWORD on top of stack
  1475.         01h define user stream
  1476.         04h intercept keystrokes from KEYBOARD to a window (handle on stack)
  1477.         05h intercept keystrokes from task's default KEYBOARD to a window
  1478.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  1479.                  DWORD address of FAR user stream handler
  1480.            (if keyboard) DWORD address of FAR filter function
  1481.  
  1482. The keyboard filter function is called when the keyboard is in field mode.  On
  1483. entry,
  1484.     AL = character
  1485.     AH = 00h or extended ASCII code if AL = 00h
  1486.     BL = field number
  1487.     CH = cursor column
  1488.     CL = cursor row
  1489.     DL = field type modifier (sixth item in field table entry)
  1490.     DH = ??? (seventh item in field table entry)
  1491.     ES:SI = window's handle
  1492. (also, in DV 2.00, DS:DI points to the field table entry.  This may change in
  1493.  other versions)
  1494. The filter function should return
  1495.     AH = 00h use keystroke
  1496.          01h ignore keystroke
  1497.          >1 beep and ignore keystroke
  1498. ---------------------------------------------
  1499. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  1500.     AH = 12h
  1501.     BH = 14h
  1502.     BL = object
  1503.         00h mailbox handle is DWORD on top of stack
  1504.         02h use given task's mailbox (task's handle on top of stack)
  1505.         03h use current task's default mailbox
  1506. Note:    release exclusive access by sending CLOSE message to mailbox
  1507.     access may be requested multiple times, and requires multiple CLOSEs
  1508. SeeAlso: AH=12h/BH=0Dh
  1509. ---------------------------------------------
  1510. INT 15 - DESQview 2.2 - SEND MESSAGE - SET FLAGS
  1511.     AH = 12h
  1512.     BH = 15h
  1513.     BL = object
  1514.         00h DWORD on top of stack
  1515.         mailbox, keyboard, or pointer only
  1516.         02h mailbox for task whose handle is on top of stack
  1517.         03h mailbox for current task
  1518.         04h keyboard for task whose handle is on top of stack
  1519.         05h keyboard for current task
  1520.     STACK: DWORD flags
  1521.         if mailbox:
  1522.             bit 0: all mail messages in common memory
  1523.             bit 1: allow write even if closed
  1524.             bit 2: don't erase messages when mailbox closed
  1525.         if keyboard:
  1526.             bit 5: exclusive input when keyboard in use for input
  1527. Return: nothing
  1528. Note:    this call is only available if the API level has been set to at least
  1529.       2.2
  1530. SeeAlso: AH=12h/BH=16h
  1531. ---------------------------------------------
  1532. INT 15 - DESQview 2.2 - SEND MESSAGE - GET FLAGS
  1533.     AH = 12h 
  1534.     BH = 16h
  1535.     BL = object
  1536.         00h DWORD on top of stack
  1537.         mailbox, keyboard, or pointer only
  1538.         02h mailbox for task whose handle is on top of stack
  1539.         03h mailbox for current task
  1540.         04h keyboard for task whose handle is on top of stack
  1541.         05h keyboard for current task
  1542. Return: STACK: DWORD current control flags
  1543. Note:    this call is only available if the API level has been set to at least
  1544.       2.2
  1545. SeeAlso: AH=12h/BH=15h
  1546. ---------------------------------------------
  1547. INT 15 - DESQview - GET PROGRAM NAME
  1548.     AX = DE00h
  1549. Return: AX = offset into DESQVIEW.DVO of current program's record (see below)
  1550. SeeAlso: AX=DE07h
  1551.  
  1552. Format of program entry in DESQVIEW.DVO:
  1553. Offset    Size    Description
  1554.  00h    BYTE    length of name
  1555.  01h  N BYTEs    name
  1556.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  1557.     WORD    ??? seems always to be 0000h
  1558.     BYTE    end flag: 00h for all but last entry, which is FFh
  1559. ---------------------------------------------
  1560. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  1561.     AX = DE01h
  1562. Return: nothing
  1563. Note:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  1564. ---------------------------------------------
  1565. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  1566.     AX = DE02h
  1567. Return: nothing
  1568. Note:    this call is a NOP in DV 2.x
  1569. SeeAlso: AX=DE03h
  1570. ---------------------------------------------
  1571. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  1572.     AX = DE03h
  1573. Return: AX = ??? for current window
  1574.     BX = ??? for current window
  1575. Note:    this call is a NOP in DV 2.x
  1576. SeeAlso: AX=DE02h
  1577. ---------------------------------------------
  1578. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  1579.     AX = DE04h
  1580. Return: BX = bytes of common memory available
  1581.     CX = largest block available
  1582.     DX = total common memory in bytes
  1583. SeeAlso: AX=DE05h,DE06h
  1584. ---------------------------------------------
  1585. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  1586.     AX = DE05h
  1587. Return: BX = K of memory available
  1588.     CX = largest block available
  1589.     DX = total conventional memory in K
  1590. SeeAlso: AX=DE04h,DE06h
  1591. ---------------------------------------------
  1592. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  1593.     AX = DE06h
  1594. Return: BX = K of expanded memory available
  1595.     CX = largest block available
  1596.     DX = total expanded memory in K
  1597. SeeAlso: AX=DE04h,DE05h
  1598. ---------------------------------------------
  1599. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  1600.     AX = DE07h
  1601. Return: AX = number of program as it appears on the "Switch Windows" menu
  1602. SeeAlso: AX=DE00h
  1603. ---------------------------------------------
  1604. INT 15 - DESQview - GET ???
  1605.     AX = DE08h
  1606. Return: AX = 0000h if ??? is not set to the current task
  1607.          0001h if ??? is set to the current task
  1608. ---------------------------------------------
  1609. INT 15 - DESQview - UNIMPLEMENTED
  1610.     AX = DE09h
  1611. Return: nothing (NOP in DV 1.x and 2.x)
  1612. ---------------------------------------------
  1613. INT 15 - DESQview 2.x - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  1614.     AX = DE0Ah
  1615.     BL = character
  1616. Return: character displayed, next call will display in next position (which
  1617.     wraps back to the start of the line if off the right edge of screen)
  1618. Notes:    displays character on bottom line of *physical* screen, regardless
  1619.       of current size of window (even entirely hidden)
  1620.     does not know about graphics display modes, just pokes the characters
  1621.       into display memory
  1622. SeeAlso: AX=1003h
  1623. ---------------------------------------------
  1624. INT 15 - DESQview 2.x - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  1625.     AX = DE0Bh
  1626.     BL = API level major version number
  1627.     BH = API level minor version number
  1628. Return: AX = maximum API level (AL = major, AH = minor)
  1629. Notes:    if the requested API level is greater than the version of DESQview, a
  1630.       "You need a newer version" error window is popped up
  1631.     some early copies of DV 2.00 return AX=0200h instead of 0002h
  1632. ---------------------------------------------
  1633. INT 15 - DESQview 2.x - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  1634.     AX = DE0Ch
  1635.     BX = number of bytes
  1636. Return: ES:DI -> allocated block
  1637. SeeAlso: AX=1001h,DE0Dh
  1638. ---------------------------------------------
  1639. INT 15 - DESQview 2.x - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  1640.     AX = DE0Dh
  1641.     ES:DI -> previously allocated block
  1642. Return: nothing
  1643. SeeAlso: AX=1002h,DE0Ch
  1644. ---------------------------------------------
  1645. INT 15 - DESQview 2.x - FIND MAILBOX BY NAME
  1646.     AX = DE0Eh
  1647.     ES:DI -> name to find
  1648.     CX = length of name
  1649. Return: BX = 0000h not found
  1650.          0001h found
  1651.         DS:SI = object handle
  1652. SeeAlso: AH=12h/BH=11h
  1653. ---------------------------------------------
  1654. INT 15 - DESQview 2.x - ENABLE DESQview EXTENSIONS
  1655.     AX = DE0Fh
  1656. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  1657. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  1658.     enables an additional mouse mode
  1659. ---------------------------------------------
  1660. INT 15 - DESQview 2.x - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  1661.     AX = DE10h
  1662.     BH = scan code
  1663.     BL = character
  1664. Return: nothing
  1665. Note:    a later read will get the keystroke as if it had been typed by the user
  1666.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  1667. SeeAlso: INT 16/AH=05h
  1668. ---------------------------------------------
  1669. INT 15 - DESQview 2.x - ENABLE/DISABLE AUTOMATIC JUSTIFICATION OF WINDOW
  1670.     AX = DE11h
  1671.     BL = 00h      viewport will not move automatically
  1672.          nonzero  viewport will move to keep cursor visible
  1673. Return: nothing
  1674. ---------------------------------------------
  1675. INT 15 - DESQview 2.01+ - SET ???
  1676.     AX = DE12h
  1677.     BX = 0000h    clear ??? flag
  1678.          nonzero  set ??? flag
  1679. Return: nothing
  1680. ---------------------------------------------
  1681. INT 15 - DESQview 2.2 - GET CRITICAL NESTING COUNT
  1682.     AX = DE13h
  1683. Return: BX = number of calls to BEGINC (see INT 15/AX=101Bh) without matching
  1684.          ENDC (see INT 15/AX=101Ch)
  1685. SeeAlso: AX=101Bh,101Ch,DE1Bh,DE1Ch
  1686. ---------------------------------------------
  1687. INT 15 - DESQview 2.2 - GET OBJECT TYPE
  1688.     AX = DE14h
  1689.     ES:DI -> object
  1690. Return: BL = 00h not an object
  1691.          08h window or task
  1692.          09h mailbox
  1693.          0Ah keyboard
  1694.          0Bh timer
  1695.          0Ch objectq
  1696.          0Fh pointer
  1697.          10h panel
  1698. SeeAlso: AX=1016h
  1699. ---------------------------------------------
  1700. INT 15 - DESQview 2.2 - SET MAILBOX ERROR HANDLING
  1701.     AX = DE15h
  1702.     BL = 00h post system error on conditions listed below
  1703.          01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  1704.          messages sent to mailboxes which fail due to lack of system
  1705.          or common memory
  1706. Return: nothing
  1707. SeeAlso: AX=DE16h
  1708. ---------------------------------------------
  1709. INT 15 - DESQview 2.2 - GET MAILBOX ERROR HANDLING
  1710.     AX = DE16h
  1711. Return: BL = 00h post system error
  1712.          01h return carry flag set
  1713. SeeAlso: AX=DE15h
  1714. ---------------------------------------------
  1715. INT 15 - DESQview 2.20-2.25 - reserved
  1716.     AX = DE17h
  1717. Return: pops up "Programming error" window
  1718. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  1719. ---------------------------------------------
  1720. INT 15 - DESQview 2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  1721.     AX = 1117h
  1722.     BX = 0000h    get current mapping context without setting
  1723.          nonzero    set new mapping context
  1724. Return: BX = mapping context in effect before call
  1725. Notes:    mapping contexts determine conventional-memory addressability; setting
  1726.       a mapping context ensures that the associated program and data areas
  1727.       are in memory for access.  Usable by drivers, TSRs and shared
  1728.       programs.
  1729.     Caller need not be running under DESQview
  1730. ---------------------------------------------
  1731. INT 15 - DESQview 2.2 - ???
  1732.     AX = DE18h
  1733.     BP = function number
  1734.         high byte must be 10h
  1735.         low byte is function
  1736.         00h set ???
  1737.             BL = ???  (00h-10h, video mode???)
  1738.             BH = value to store
  1739.         03h set ???
  1740.             BL = ??? (stored in driver)
  1741.         0Ah get ???
  1742.             ES:DI -> 18-byte buffer to hold ???
  1743. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  1744. ---------------------------------------------
  1745. INT 15 - DESQview 2.26 - ALLOCATE "COMMON" MEMORY
  1746.     AX = DE19h
  1747.     BX = number of bytes to allocate
  1748. Return: AX = 0000h successful
  1749.         ES:DI -> allocated block
  1750.          0001h insufficient memory
  1751. SeeAlso: AX=DE0Ch,DE1Ah
  1752. ---------------------------------------------
  1753. INT 15 - DESQview 2.26 - DEALLOCATE "COMMON" MEMORY
  1754.     AX = DE1Ah
  1755.     DS:SI -> previously allocated block
  1756. Return: ???
  1757. SeeAlso: AX=DE0Dh,DE19h
  1758. ---------------------------------------------
  1759. INT 15 - DESQview 2.26 - DECREMENT CRITICAL NESTING COUNT
  1760.     AX = DE1Bh
  1761. Return: nothing
  1762. SeeAlso: AX=DE13h,DE1Ch
  1763. ---------------------------------------------
  1764. INT 15 - DESQview 2.26 - INCREMENT CRITICAL NESTING COUNT
  1765.     AX = DE1Ch
  1766. Return: nothing
  1767. SeeAlso: AX=DE13h,DE1Bh
  1768. ---------------------------------------------
  1769. INT 15 - DESQview 2.26 - ???
  1770.     AX = DE1Dh
  1771.     DX = segment of ??? object
  1772.     ???
  1773. Return: AX = ???
  1774. ---------------------------------------------
  1775. INT 15 - DESQview 2.26 - GET TRUE VIDEO PARAMETERS
  1776.     AX = DE1Eh
  1777. Return: BL = actual video mode (may differ from INT 10/AH=0Fh return)
  1778.     CL = actual number of rows on screen
  1779.     CH = actual number of columns on screen
  1780. SeeAlso: INT 10/AH=0Fh
  1781. ---------------------------------------------
  1782. INT 15 - DESQview 2.26 - GET ???
  1783.     AX = DE1Fh
  1784. Return: BX = segment of ??? object or 0000h if none
  1785. ---------------------------------------------
  1786. INT 15 - DESQview 2.26 - INTERRUPT ANOTHER TASK
  1787.     AX = DE20h
  1788.     BX = segment of handle of task to interupt
  1789.     DX:CX -> interrupt routine
  1790. Return: ???
  1791. ---------------------------------------------
  1792. INT 15 - DESQview 2.26 - CONTROL 386 SCREEN VIRTUALIZATION
  1793.     AX = DE21h
  1794.     BX = 0000h turn off
  1795.          nonzero turn on
  1796. Return: BX = old state of virtualization
  1797. ---------------------------------------------
  1798. INT 15 - DESQview 2.26 - GET TASK MEMORY STATUS
  1799.     AX = DE22h
  1800.     DX = segment of task handle
  1801. Return: DX = total amount of memory in paragraphs
  1802.     BX = amount of system memory in paragraphs
  1803.     CX = largest block of system memory available in paragraphs
  1804.     AX = flags
  1805.         bit 0: system memory resides in shared memory
  1806.             1: process's memory is swapped out
  1807.             2: system memory is swapped out
  1808. ---------------------------------------------
  1809. INT 21 - DESQview - INSTALLATION CHECK
  1810.     AH = 2Bh
  1811.     AL = subfunction (DV v2.00+)
  1812.         01h get version
  1813.         Return: BX = version (BH = major, BL = minor)
  1814.         Note: early copies of v2.00 return 0002h
  1815.         02h get shadow buffer info, and start shadowing
  1816.         Return: BH = rows in shadow buffer
  1817.             BL = columns in shadow buffer
  1818.             DX = segment of shadow buffer
  1819.         04h get shadow buffer info
  1820.         Return: BH = rows in shadow buffer
  1821.             BL = columns in shadow buffer
  1822.             DX = segment of shadow buffer
  1823.         05h stop shadowing
  1824.     CX = 4445h ('DE')
  1825.     DX = 5351h ('SQ')
  1826. Return: AL = FFh if DESQview not installed
  1827. Note:    in DESQview v1.x, there were no subfunctions; this call only identified
  1828.     whether or not DESQview was loaded
  1829. SeeAlso: INT 10/AH=FEh,FFh
  1830. ---------------------------------------------
  1831. INT 2F - Multiplex - DESQview 2.26 External Dev Interface - INSTALLATION CHECK
  1832.     AX = DE00h
  1833.     BX = 4445h ("DE")
  1834.     CX = 5844h ("XD")
  1835.     DX = 4931h ("I1")
  1836. Return: AL = FFh if installed (even if other registers do not match)
  1837.     if BX,CX, and DX were as specified on entry,
  1838.         BX = 4845h
  1839.         CX = 5245h
  1840.         DX = 4456h ("DV")
  1841. ---------------------------------------------
  1842. INT 2F - Multiplex - DESQview 2.26 External Dev Itrface - DRIVER CUSTOM SUBFUNC
  1843.     AX = DE01h
  1844.     BX = driver ID
  1845.     other registers as needed by driver
  1846. Note:    XDI drivers should pass this call through to previous handler if ID
  1847.       does not match
  1848. ---------------------------------------------
  1849. INT 2F - Multiplex - DESQview 2.26 XMS XDI - ???
  1850.     AX = DE01h
  1851.     BX = FFFEh
  1852.     CX = 4D47h
  1853.     DX = 0052h
  1854. Return: AL = FFh
  1855.     DX = 584Dh
  1856. ---------------------------------------------
  1857. INT 2F - Multiplex - DESQview 2.26 XDI - DVTree DVTXDI.COM
  1858.     AX = DE01h
  1859.     BX = 7474h
  1860.     CL = function
  1861.         00h installation check
  1862.         Return: AL = FFh
  1863.         01h get process handle
  1864.         DX = keys on Open Window menu (DL = first, DH = second)
  1865.         Return: AX = process handle or 0000h if not running
  1866. Return: BX = 4F4Bh ("OK")
  1867.     DL = ???
  1868. Note:    DVTree is a shareware DOS shell/DESQview process manager by Mike Weaver
  1869. ---------------------------------------------
  1870. INT 2F - Multiplex - DESQview 2.26 External Device Interface - DV INIT COMPLETE
  1871.     AX = DE02h
  1872.     BX = mapping context of DESQview
  1873.     DX = handle of DESQview system task
  1874. SeeAlso: AX=DE03h
  1875. Note:    XDI drivers should pass all calls through to previous handler
  1876. ---------------------------------------------
  1877. INT 2F - Multiplex - DESQview 2.26 External Device Interface - DV TERMINATION
  1878.     AX = DE03h
  1879.     BX = mapping context of DESQview
  1880.     DX = handle of DESQview system task
  1881. SeeAlso: AX=DE02h
  1882. Note:    XDI drivers should pass all calls through to previous handler
  1883. ---------------------------------------------
  1884. INT 2F - Multiplex - DESQview 2.26 External Device Interface - ADD PROCESS
  1885.     AX = DE04h
  1886.     BX = mapping context of new process
  1887.     DX = handle of process
  1888. Return: nothing
  1889. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  1890.       (see below) from "common" memory to control access to XMS memory
  1891.     all DOS, BIOS, and DV API calls are valid in handler
  1892.     XDI drivers should pass all calls through to previous handler
  1893. SeeAlso: AX=DE05h
  1894.  
  1895. Format of XMS XDI structure:
  1896. Offset    Size    Description
  1897.  00h    DWORD    pointer to 10-byte record???
  1898.  04h    DWORD    pointer to next XMS XDI structure
  1899.  08h    WORD    mapping context
  1900.  0Ah    BYTE    ???
  1901.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h
  1902.         (FAR jump to next field)
  1903.  10h  6 BYTEs    FAR handler for XMS driver entry point
  1904.         (consists of a FAR CALL followed by RETF)
  1905. ---------------------------------------------
  1906. INT 2F - Multiplex - DESQview 2.26 External Device Interface - REMOVE PROCESS
  1907.     AX = DE05h
  1908.     BX = mapping context of process
  1909.     DX = handle of process
  1910. Return: nothing
  1911. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  1912.     XDI drivers should pass all calls through to previous handler
  1913. SeeAlso: AX=DE04h
  1914. ---------------------------------------------
  1915. INT 2F - Multiplex - DESQview 2.26 XDI - CREATE TASK
  1916.     AX = DE06h
  1917.     BX = mapping context of process containing task???
  1918.     DX = handle of task???
  1919. Note:    XDI drivers should pass all calls through to previous handler
  1920. ---------------------------------------------
  1921. INT 2F - Multiplex - DESQview 2.26 XDI - TERMINATE TASK
  1922.     AX = DE07h
  1923.     BX = mapping context of process containing task???
  1924.     DX = handle of task???
  1925. Note:    XDI drivers should pass all calls through to previous handler
  1926. ---------------------------------------------
  1927. INT 2F - Multiplex - DESQview 2.26 XDI - SAVE STATE
  1928.     AX = DE08h
  1929.     BX = mapping context of task being switched from
  1930.     DX = handle of task being switched from
  1931. Notes:    invoked prior to task swap, interrupts, etc
  1932.     XDI drivers should pass all calls through to previous handler
  1933. ---------------------------------------------
  1934. INT 2F - Multiplex - DESQview 2.26 XDI - RESTORE STATE
  1935.     AX = DE09h
  1936.     BX = mapping context of task being switched to
  1937.     DX = handle of task being switched to
  1938. Notes:    state is restored except for interrupts
  1939.     XDI drivers should pass all calls through to previous handler
  1940. ---------------------------------------------
  1941. INT 2F - Multiplex - DESQview 2.26 XDI - CHANGE KEYBOARD FOCUS
  1942.     AX = DE0Ah
  1943.     BX = mapping context of task receiving focus
  1944.     DX = handle of running task
  1945. Note:    XDI drivers should pass all calls through to previous handler
  1946. ---------------------------------------------
  1947. INT 2F - Multiplex - DESQview 2.26 XDI - DVP PROCESSING COMPLETE
  1948.     AX = DE0Bh
  1949.     BX = mapping context of DESQview system task
  1950.     CX = number of system memory paragraphs required for the use of all
  1951.         XDI drivers (DV will add this to system memory in DVP buffer)
  1952.     DX = handle of DESQview system task
  1953.     SI = mapping context of new process if it starts
  1954.     ES:DI -> DVP buffer
  1955. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  1956.     XDI drivers should pass all calls through to previous handler
  1957. ---------------------------------------------
  1958. INT 2F - Multiplex - DESQview 2.26 XDI - SWAP OUT PROCESS
  1959.     AX = DE0Ch
  1960.     BX = mapping context of task being swapped out
  1961.     DX = handle of DESQview system task
  1962. Note:    XDI drivers should pass all calls through to previous handler
  1963. ---------------------------------------------
  1964. INT 2F - Multiplex - DESQview 2.26 XDI - SWAP IN PROCESS
  1965.     AX = DE0Dh
  1966.     BX = mapping context of process just swapped in
  1967.     DX = handle of DESQview system task
  1968. Note:    XDI drivers should pass all calls through to previous handler
  1969. ---------------------------------------------
  1970. INT 2F - Multiplex - DESQview 2.26 XDI - DVP START FAILED
  1971.     AX = DE0Eh
  1972.     BX = mapping context of DESQview system task
  1973.     DX = handle of DESQview system task
  1974.     SI = mapping context of failed process
  1975. Note:    XDI drivers should pass all calls through to previous handler
  1976. ---------------------------------------------
  1977. INT 67 - Virtual Control Program Interface - INSTALLATION CHECK
  1978.     AX = DE00h
  1979. Return: AH = 00h    VCPI is present
  1980.         BH = major version number
  1981.         BL = minor version number
  1982.     AH nonzero  VCPI not present
  1983. ---------------------------------------------
  1984. INT 67 - Virtual Control Program Interface - GET PROTECTED MODE INTERFACE
  1985.     AX = DE01h
  1986.     ES:DI -> 4K page table buffer
  1987.     DS:SI -> three descriptor table entries in GDT
  1988.         first becomes code segment descriptor, other two for use by
  1989.         main control program
  1990. Return: AH = 00h successful
  1991.         DI -> first unused page table entry in buffer
  1992.         EBX -> protected mode entry point in code segment
  1993.     AH = nonzero  failed
  1994. ---------------------------------------------
  1995. INT 67 - Virtual Control Program Interface - GET MAX PHYSICAL MEMORY ADDRESS
  1996.     AX = DE02h
  1997. Return: AH = 00h  successful
  1998.         EDX = physical address of highest 4K memory page
  1999.     AH nonzero: failed
  2000. ---------------------------------------------
  2001. INT 67 - Virtual Control Program Interface - GET NUMBER OF FREE 4K PAGES
  2002.     AX = DE03h
  2003. Return: AH = 00h  successful
  2004.         EDX = number of free 4K pages
  2005.     AH nonzero: failed
  2006. Notes:    returns total number of pages available to ALL tasks in system
  2007.     also available in protected mode by calling the protected-mode VCPI
  2008.       entry point
  2009. SeeAlso: AX=DE04h
  2010. ---------------------------------------------
  2011. INT 67 - Virtual Control Program Interface - ALLOCATE A 4K PAGE
  2012.     AX = DE04h
  2013. Return: AH = 00h successful
  2014.         EDX = physical address of allocated page
  2015.     AH nonzero: failed
  2016. Notes:    the client program is responsible for freeing all memory allocated
  2017.       with this call before terminating
  2018.     also available in protected mode by calling the protected-mode VCPI
  2019.       entry point
  2020. SeeAlso: AX=DE03h,DE05h
  2021. ---------------------------------------------
  2022. INT 67 - Virtual Control Program Interface - FREE 4K PAGE
  2023.     AX = DE05h
  2024.     EDX = physical address of 4K page
  2025. Return: AH = 00h successful
  2026.     AH nonzero: failed
  2027. Note:    also available in protected mode by calling the protected-mode VCPI
  2028.       entry point
  2029. SeeAlso: AX=DE04h
  2030. ---------------------------------------------
  2031. INT 67 - Virtual Control Program Interface - GET PHYS ADDR OF PAGE IN FIRST MB
  2032.     AX = DE06h
  2033.     CX = page number (linear address shifted right 12 bits)
  2034. Return: AH = 00h successful
  2035.         EDX = physical address of page
  2036.     AH nonzero: invalid page number (AH = 8Bh recommended)
  2037. ---------------------------------------------
  2038. INT 67 - Virtual Control Program Interface - READ CR0
  2039.     AX = DE07h
  2040. Return: AH = 00h
  2041.     EBX = value of Control Register 0
  2042. SeeAlso: AX=DE07h
  2043. ---------------------------------------------
  2044. INT 67 - Virtual Control Program Interface - READ DEBUG REGISTERS
  2045.     AX = DE08h
  2046.     ES:DI -> array of 8 DWORDs
  2047. Return: AH = 00h
  2048.     buffer filled with DR0 first, DR7 last, DR4 and DR5 unused
  2049. SeeAlso: AX=DE09h
  2050. ---------------------------------------------
  2051. INT 67 - Virtual Control Program Interface - SET DEBUG REGISTERS
  2052.     AX = DE09h
  2053.     ES:DI -> array of 8 DWORDs holding new values of debug registers
  2054. Return: AH = 00h
  2055. Note:    values for DR4 and DR5 ignored
  2056. SeeAlso: AX=DE08h
  2057. ---------------------------------------------
  2058. INT 67 - Virtual Control Program Interface - GET 8259 INTERRUPT VECTOR MAPPINGS
  2059.     AX = DE0Ah
  2060. Return: AH = 00h successful
  2061.         BX = first vector used by master 8259 (IRQ0)
  2062.         CX = first vector used by slave 8259 (IRQ8)
  2063.     AH nonzero: failed
  2064. Note:    CX is undefined in systems without a slave 8259
  2065. SeeAlso: AX=DE0Bh
  2066. ---------------------------------------------
  2067. INT 67 - Virtual Control Program Interface - SET 8259 INTERRUPT VECTOR MAPPINGS
  2068.     AX = DE0Bh
  2069.     BX = first vector used by master 8259
  2070.     CX = first vector used by slave 8259
  2071.     interrupts disabled
  2072. Return: AH = 00h successful
  2073.     AH nonzero: failed 
  2074. Notes:    This call merely informs the server that the client has changed the
  2075.       interrupt mappings.  The client may not change the mappings if they
  2076.       have already been changed by the server or another client, and is
  2077.       responsible for restoring the original mappings before terminating.
  2078. SeeAlso: AX=DE0Ah
  2079. ---------------------------------------------
  2080. INT 67 - Virtual Control Program Interface - SWITCH TO PROTECTED MODE
  2081.     AX = DE0Ch
  2082.     ESI = linear address in first megabyte of values for system registers
  2083.     interrupts disabled
  2084. Return: interrupts disabled
  2085.     GDTR, IDTR, LDTR, TR loaded
  2086.     SS:ESP must have at least 16 bytes space, and the entry point is
  2087.         required to set up a new stack before enabling interrupts
  2088.     EAX, ESI, DS, ES, FS, GS destroyed
  2089. SeeAlso: INT 15/AH=89h
  2090.  
  2091. Note:    in protected mode, calling the protected-mode VCPI entry point with 
  2092.       AX = DE0Ch
  2093.       DS = segment selector from function DE01h
  2094.       SS:ESP in first megabyte of linear memory
  2095.       STACK:QWORD  return address from FAR call to 32-bit segment
  2096.         DWORD  EIP
  2097.         DWORD  CS
  2098.         DWORD  reserved for EFLAGS
  2099.         DWORD  ESP
  2100.         DWORD  SS
  2101.         DWORD  ES
  2102.         DWORD  DS
  2103.         DWORD  FS
  2104.         DWORD  GS
  2105.       and interrupts disabled, will switch to virtual86 mode with
  2106.       interrupts disabled, all segment registers loaded, and EAX destroyed.
  2107.  
  2108. Format of system register values for switch to protected mode:
  2109. Offset    Size    Description
  2110.  00h    DWORD    value for CR3
  2111.  04h    DWORD    linear address in first megabyte of value for GDTR
  2112.  08h    DWORD    linear address in first megabyte of value for IDTR
  2113.  0Ch    WORD    value for LDTR
  2114.  0Eh    WORD    value for TR
  2115.  10h    PWORD    CS:EIP of protected mode entry-point
  2116. ---------------------------------------------
  2117.